# -*- coding: utf-8 -*-
"""
网页读取服务层

功能说明:
- 提供统一的网页内容读取服务接口
- 集成秘塔AI网页读取API（/reader）
- 进行最小参数校验与错误处理

作者: MetasoCreator Team
创建时间: 2025-08-21
"""

from typing import Dict, Any, Optional
from datetime import datetime

from .metaso_client import get_metaso_client, MetasoAPIError


class ReaderService:
    """
    网页读取服务类
    
    职责:
    - 校验 URL 参数
    - 调用外部秘塔 API 获取网页内容
    - 统一成功/错误响应结构
    """
    
    def __init__(self) -> None:
        self.client = get_metaso_client()
    
    def get_webpage_content(self, url: str) -> Dict[str, Any]:
        """
        读取网页内容
        
        Args:
            url: 网页URL（必须以 http:// 或 https:// 开头）
        
        Returns:
            Dict: 扁平结构，包含 success/title/url/markdown/author/date/credits/timestamp 等
        """
        try:
            # 最小校验
            if not url or not isinstance(url, str) or not url.strip():
                return self._create_error_response("网页URL不能为空")
            url = url.strip()
            if not (url.startswith('http://') or url.startswith('https://')):
                return self._create_error_response("URL必须以http://或https://开头")
            
            # 外部调用（默认返回JSON，字段包含 markdown）
            raw = self.client.get_content(url)
            markdown = raw.get('markdown') or raw.get('content') or ''
            return {
                'success': True,
                'title': raw.get('title', ''),
                'url': raw.get('url', url),
                'author': raw.get('author', ''),
                'date': raw.get('date', ''),
                'markdown': markdown,
                'credits': raw.get('credits'),
                'timestamp': datetime.now().isoformat()
            }
        except MetasoAPIError as e:
            return self._create_error_response(str(e))
        except Exception:
            return self._create_error_response("网页读取服务发生未知错误")
    
    def _create_error_response(self, message: str) -> Dict[str, Any]:
        return {
            'success': False,
            'error': message,
            'title': '',
            'url': '',
            'author': '',
            'date': '',
            'markdown': '',
            'credits': None,
            'timestamp': datetime.now().isoformat()
        } 